package CtrLayer;
import ModelLayer.*;

/**
 * Write a description of class LoanCtr here.
 * 
 * @author (Frederik, Simon, Claus, Minh, Nichlas, Nikolai) 
 * @version (06-11-2014)
 */
public class LoanCtr
{
    // instance variables - replace the example below with your own
    private DvdCtr dCtr;
    private PersonCtr pCtr;
    
    /**
     * Constructor for objects of class LoanCtr
     */
    public LoanCtr()
    {
        // initialise instance variables
        pCtr = new PersonCtr();
        dCtr = new DvdCtr();
    }
    
    /**
     * En returmetode for lån
     * @return et lån udfra lånets id
     */
    public Loan findLoan(String id)
    {
        return pCtr.getPCon().findLoan(id);
    }
    
    /**
     * En returmetode til at se om kopien er hjemme
     * @return om kopien er hjemme udfra serienummeret
     */
    public boolean isCopyHome(String serialNumber)
    {
        return findCopy(serialNumber).getIsHome();
    }
    
    /**
     * En metode til at lave et lån
     * Vi starter med en if sætning som lyder: hvis kopiens serialnumber ikke er lig med 0, og er kopien 
     * hjemme, opretter den et nyt lån som, hvis personens telefonnummer ikke er lig med 0, returner true 
     * og gennemføre lånet. Ellers vil den returne false
     */
    public boolean createLoan(String phone, String id, String borrowDate, int period, String serialNumber)
    {
        if (dCtr.findCopy(serialNumber) != null && isCopyHome(serialNumber)) {
            Loan l = new Loan(id, dCtr.findCopy(serialNumber), borrowDate, period);

            if(pCtr.findPerson(phone) != null) {
                pCtr.findPerson(phone).addLoan(l);
                return true;
            }
            else {

                return false;
            }
        }
        return false;
    }
    /**
     * En metode til at aflevere et lån
     * Vi starter med sætte en find person ind i constructoren, hvis ikke personen findes returner den false
     * Hvis personen findes, har vi en if sætning som lyder:
     * Hvis personen findes skal den kunne sette en String værdi s, som finder personens lån fra serienummeret, 
     * hvorefter den finder kopiens serienummer.
     * Hvis disse stemmer overens og personens lån ikke er blevet returneret 
     * vil den gå ind i if sætning og sette "setIsHome" og "setIsReturn" til true og returnere true
     */
    public boolean endLoan(String phone, String serialNumber)
    {
        Person p = pCtr.findPerson(phone);
        if (p != null) {
            String s = p.findLoan(serialNumber).getCopy().getSerialNumber();
            
            if(serialNumber.equals (s) && p.findLoan(serialNumber).getIsReturn() == false) { 
                p.findLoan(serialNumber).getCopy().setIsHome(true);
                p.findLoan(serialNumber).setIsReturn(true);
                return true;
            }
        }
        return false;
    }
    
    /**
     * En returmetode til at finde en kopi
     * @return finder kopien udfra serienummeret
     */
    public Copy findCopy(String serialNumber)
    {
        return dCtr.findCopy(serialNumber);
    }
    
    /**
     * En returmetode til at finde DvdCrtl i CtrlLayeret
     * @return dCtrl
     */
    public DvdCtr getDvdCtr()
    {
        return dCtr;
    }
    
    /**
     * En returmetode til at finde PersonCtr i CtrlLayereret
     * @return pCtr
     */
    public PersonCtr getPersonCtr()
    {
        return pCtr;
    }

}
